package string;

public class StringBufferExample {
    public static void main(String[] args) {
        // 1. 创建StringBuffer对象
        StringBuffer sb1 = new StringBuffer(); // 初始容量16
        StringBuffer sb2 = new StringBuffer(32); // 指定初始容量
        StringBuffer sb3 = new StringBuffer("Hello"); // 用字符串初始化

        // 2. 追加操作（最常用）
        sb3.append(", ");
        sb3.append("World");
        sb3.append('!');
        System.out.println("追加后: " + sb3.toString()); // "Hello, World!"

        // 3. 插入操作
        sb3.insert(5, " Java"); // 在索引5处插入
        System.out.println("插入后: " + sb3); // "Hello Java, World!"

        // 4. 删除操作
        sb3.delete(5, 10); // 删除索引5到9的字符
        System.out.println("删除后: " + sb3); // "Hello, World!"

        // 5. 替换操作
        sb3.replace(7, 12, "Java"); // 替换索引7到11的字符
        System.out.println("替换后: " + sb3); // "Hello, Java!"

        // 6. 反转操作
        sb3.reverse();
        System.out.println("反转后: " + sb3); // "!avaJ ,olleH"
        sb3.reverse(); // 再反转回来

        // 7. 其他常用方法
        System.out.println("\n长度: " + sb3.length()); // 长度
        System.out.println("容量: " + sb3.capacity()); // 容量
        System.out.println("字符索引3: " + sb3.charAt(3)); // 获取指定字符
        System.out.println("子串: " + sb3.substring(7, 11)); // 获取子串

        // 8. 效率对比：StringBuffer vs String
        long startTime = System.currentTimeMillis();

        // 使用String拼接（效率低）
        String str = "";
        for (int i = 0; i < 10000; i++) {
            str += i;
        }

        long stringTime = System.currentTimeMillis() - startTime;
        startTime = System.currentTimeMillis();

        // 使用StringBuffer拼接（效率高）
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 10000; i++) {
            sb.append(i);
        }

        long bufferTime = System.currentTimeMillis() - startTime;

        System.out.println("\nString拼接时间: " + stringTime + "ms");
        System.out.println("StringBuffer拼接时间: " + bufferTime + "ms");
    }
}
